Notes (Week 5 Monday)
These are the notes I wrote during the lecture.
Natural deduction! It's a formal proof system for predicate logic. A formal proof system is a set of *inference rules* that tell you how you're allowed to build proofs from other proofs. Alternatively: how you're allowed to draw conclusions from premises. Generally rules take this form: premise premise ... _________________________ name conclusion Intuitively: if you have proofs of all the premises, you can invoke the rule "name" to conclude "conclusion". The point is: the *only* proof steps we allow are those that are instances of one of the inference rules. This makes the proof easy to check for correctness: we just check if every rule application looks like the inference rule we claim to apply (simple syntactic check) But: getting the intution of *why* a claim is true from a ND proof might be hard. →-introduction: [A] . . B ______ →-I A → B "If I can prove B under the assumption that A holds, then I can prove A → B" Alternative notation: ⊢ A → B ⊢ provability ⊢ φ "I have a natural deduction proof of φ" T ⊢ φ "I have a natural deduction proof of φ, from the premises T" A ⊢ B __________ →-I ⊢ A → B Premises in square brackets denote "local" premises that only exist in a subproof Q: Is there a good way to specify the scope of the premise? A: Not in this notation :( But see Fitch notation (later) B ∧ A B ∧ A _____ ∧-E ______ ∧-E A B ____________________ ∧-I A ∧ B The above is a proof of commutativity of ∧ formally: B ∧ A ⊢ A ∧ B Fitch style rules are more vertical than horizontal 1 | premise 2 | premise 3 |- 4 | conclusion (justification) Generally: a proof proceeds by going from premises (at the top) and using inference rules (one per line) to conclude more and more thing ∧-I | A | B |- | A ∧ B ∧-I →-introduction: [A] . . B ______ →-I A → B | | A | |- | | B |- | A → B →-I c.f. programming languages (Python) Q: Are we allowed to use the ND proof checker in assignments? A: Yes! Feel free to use it in assignments and exams. Q: If you're using other "obvious" rules, do you have to derive them or can you assume them? (in e.g. exam situations) A: Hopefully the question text should make this clear. (but A1 doesn't :( ) By default: feel free to use any of the derived rules from either: - the slides, or - the sidebar of the ND proof editor We have defined: ⊢ provabilitiy T ⊢ φ means "we have an ND proof of φ from the premises in T" ⊧ "models", truth T ⊧ φ means "in every model that satisfies T, φ is satisfied" ⟦φ⟧v We now have the infrastructure to ask these questions: are the things we can prove in fact true? (soundess) If T ⊢ φ then T ⊧ φ are the things that are true in fact provable? (completeness) If T ⊧ φ then T ⊢ φ You can think of universal quantification (over finite domains) as syntactic sugar for conjunction ∀x∈{a,b,c}. P(x) ≡ P(a) ∧ P(b) ∧ P(c) We're specifically doing *first-order* predicate logic. The "first" refers to what kind of things we can quantify over. In first-order logic, quantifiers range over *terms* The W1 two-layer cake: - the term layer 1+3 x x-(3*5) (no logic happening) - the wffs ⊤ 1+4 ≤ 3 ∀x. x + 5 = 3 Variables always range over terms. ∀x. x+3 > 4 counts as first-order because the quantifier ranges over a term. (Not in this course) Second-order logic: variables may range over *predicates about terms* ∀P. (P(0) ∧ (∀n. P(n) ⇒ P(n+1))) ⇒ ∀n. P(n) ^ it's the principle of basic induction! One of the main limitations of FOL: it can't do induction :( but you can still fake it enough to be useful :) Also: you can't do a set comprehension :( {x | P(x)} ∀x y. x = y is syntactic sugar for ∀x.(∀y. x = y) When you use FOL, you will often specify the *domain of discourse*: the set of things you're talking about. E.g., often domain is ℕ in our examples. What if the domain of discourse is a singleton set {c} In other words: there's only thing in the world (as we model) it, and it's c. In such a world, it is in fact true that ∀x y. x = y (philosophers and theologians have a name for such silly worlds: monism) Q: If the domain is ∅, does that universal quantifiers are vacuously true? A: We don't allow empty domains, but if did: then yes. By ruling out empty domains, we get a whole bunch of algebraic laws that would otherwise be invalid. ∃x. P ≡ P if x ∉ FV(P) ^ valid in non-empty domains, but not in empty domains